﻿using System;
using System.Collections.Generic;
using System.Web;
using FancyIdea.PingShui.Core.Dal;
using FancyIdea.PingShui.Core.Util;
using FancyIdea.PingShui.Core.DbHelper;
using System.Data;

namespace FancyIdea.PingShui.Core.Bll
{
    /// <summary>
    /// 建筑 的摘要说明
    /// </summary>
    public class 建筑 : HttpHandler
    {
        #region 街道

        private void SaveStreet()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.街道维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            string method = GetStringValue("m");
            string 税务机关代码 = GetStringValue("税务机关代码");
            string 街道代码 = GetStringValue("街道代码");
            string 街道名称 = GetStringValue("街道名称");
            float 单位面积租金参考 = GetFloatValue("单位面积租金参考");
            float 预警幅度 = GetFloatValue("预警幅度");
            if (method.Equals("add"))
            {
                if (建筑操作.AddStreet(税务机关代码, 街道代码, 街道名称, 单位面积租金参考, 预警幅度))
                {
                    WriteReturnXml(0, "", null);
                }
                else
                {
                    WriteReturnXml(-1, "添加失败", null);
                }
            }
            else if (method.Equals("edit"))
            {
                if (建筑操作.UpdateStreet(税务机关代码, 街道代码, 街道名称, 单位面积租金参考, 预警幅度))
                {
                    WriteReturnXml(0, "", null);
                }
                else
                {
                    WriteReturnXml(-1, "修改失败", null);
                }
            }
        }

        private void ListStreet()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.街道维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            SimpleQueryBuilder SqlBuilder
          = new SimpleQueryBuilder()
          {
              FieldsString = @"a.*,b.税务机关名称",
              FromString = @"from 街道表 a 
left join 税务机关表 b on b.税务机关代码=a.税务机关代码",
              PageOrderString = "order by a.街道代码",
              FieldsStringForCount = "count(a.街道代码) as count"
          };
            List<string> con = new List<string>();
            con.Add("a.税务机关代码 like '%" + GetStringValue("税务机关代码") + "%'");
            con.Add("a.街道代码 like '%" + GetStringValue("街道代码") + "%'");
            con.Add("a.街道名称 like '%" + GetStringValue("街道名称") + "%'");
            SqlBuilder.Conditions = con.ToArray();
            int page = GetInt32Value("page") < 1 ? 1 : GetInt32Value("page");
            string sql = SqlBuilder.BuildQuerySql(page, Const.dataPerPage);
            string sql1 = SqlBuilder.BuildQueryStatisticSql();
            DataTable table = CmdUtil.ExcuteDataTable(sql);
            object o = CmdUtil.ExcuteScalar(sql1);
            int count = int.Parse(o == null ? "0" : o.ToString());
            int total = count % Const.dataPerPage == 0 ?
                count / Const.dataPerPage : (count / Const.dataPerPage) + 1;
            WriteListXml(0, "成功", count, Const.dataPerPage, total, page, table);
        }

        private void DropDownStreet()
        {
            DataTable table = 建筑操作.GetStreetDropDown();
            if (table != null && table.Rows.Count > 0)
            {
                WriteReturnXml(0, null, table);
            }
            else
            {
                WriteReturnXml(-1, "查询失败", table);
            }
        }

        private void DropDownStreetByCode()
        {
            string 税务机关代码 = GetStringValue("税务机关代码");
            DataTable table = 建筑操作.GetStreetDropDown(税务机关代码);
            if (table != null && table.Rows.Count > 0)
            {
                WriteReturnXml(0, null, table);
            }
            else
            {
                WriteReturnXml(-1, "查询失败", table);
            }
        }

        private void GetStreet()
        {
            string 街道代码 = GetStringValue("街道代码");
            if (string.IsNullOrEmpty("街道代码"))
            {
                WriteReturnXml(-1, "参数传入错误", null);
                return;
            }
            DataRow row = 建筑操作.GetStreet(街道代码);
            if (row != null)
            {
                WriteReturnXml(0, "", row.Table);
            }
            else
            {
                WriteReturnXml(-1, "未查询到数据", null);
            }
        }

        private void DeleteStreet()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.街道维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            string 街道代码 = GetStringValue("街道代码");
            if (string.IsNullOrEmpty("街道代码"))
            {
                WriteReturnXml(-1, "参数传入错误", null);
                return;
            }
            if (建筑操作.DeleteStreet(街道代码))
            {
                WriteReturnXml(0, "", null);
            }
            else
            {
                WriteReturnXml(-1, "删除失败", null);
            }
        }

        private void DeleteStreetMulti()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.街道维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            string[] 街道代码 = GetStringsValue("街道代码");
            if (建筑操作.DeleteStreet(街道代码))
            {
                WriteReturnXml(0, "", null);
            }
            else
            {
                WriteReturnXml(-1, "删除失败", null);
            }
        }
        #endregion

        #region 建筑

        private void SaveBuilding()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.建筑物维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            string method = GetStringValue("m");
            string 街道代码 = GetStringValue("街道代码");
            string 建筑物代码 = GetStringValue("建筑物代码");
            string 建筑物名称 = GetStringValue("建筑物名称");
            int 建筑物楼层数 = GetInt32Value("建筑物楼层数");
            float 单位面积租金参考 = GetFloatValue("单位面积租金参考");
            float 预警幅度 = GetFloatValue("预警幅度");
            float 自营房单位面积租金参考 = GetFloatValue("自营房单位面积租金参考");
            float 自营房预警幅度 = GetFloatValue("自营房预警幅度");
            string 税务机关代码 = GetStringValue("税务机关代码");
            float 一层 = GetFloatValue("一层租金参考");
            float 二层 = GetFloatValue("二层租金参考");
            float 三层及以上 = GetFloatValue("三层及以上租金参考");
            if (method.Equals("add"))
            {
                if (建筑操作.AddBuilding(街道代码, 建筑物代码, 建筑物名称, 建筑物楼层数,
                    单位面积租金参考, 预警幅度, 自营房单位面积租金参考,
                    自营房预警幅度, 税务机关代码, 一层, 二层, 三层及以上))
                {
                    WriteReturnXml(0, "", null);
                }
                else
                {
                    WriteReturnXml(-1, "添加失败", null);
                }
            }
            else if (method.Equals("edit"))
            {
                if (建筑操作.UpdateBuilding(街道代码, 建筑物代码, 建筑物名称, 建筑物楼层数,
                    单位面积租金参考, 预警幅度, 自营房单位面积租金参考, 自营房预警幅度,
                    税务机关代码, 一层, 二层, 三层及以上))
                {
                    WriteReturnXml(0, "", null);
                }
                else
                {
                    WriteReturnXml(-1, "修改失败", null);
                }
            }
        }

        private void ListBuilding()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.建筑物维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            SimpleQueryBuilder SqlBuilder
                     = new SimpleQueryBuilder()
                     {
                         FieldsString = @"a.*,b.税务机关代码,c.税务机关名称,b.街道名称",
                         FromString = @"from 建筑物表 a 
left join 街道表 b on b.街道代码=a.街道代码 
left join 税务机关表 c on c.税务机关代码=b.税务机关代码",
                         PageOrderString = "order by a.建筑物代码",
                         FieldsStringForCount = "count(a.建筑物代码) as count"
                     };
            List<string> con = new List<string>();
            con.Add("c.税务机关名称 like '%" + GetStringValue("税务机关名称") + "%'");
            con.Add("b.街道名称 like '%" + GetStringValue("街道名称") + "%'");
            con.Add("a.建筑物名称 like '%" + GetStringValue("建筑物名称") + "%'");
            SqlBuilder.Conditions = con.ToArray();
            int page = GetInt32Value("page") < 1 ? 1 : GetInt32Value("page");
            string sql = SqlBuilder.BuildQuerySql(page, Const.dataPerPage);
            string sql1 = SqlBuilder.BuildQueryStatisticSql();
            DataTable table = CmdUtil.ExcuteDataTable(sql);
            object o = CmdUtil.ExcuteScalar(sql1);
            int count = int.Parse(o == null ? "0" : o.ToString());
            int total = count % Const.dataPerPage == 0 ?
                count / Const.dataPerPage : (count / Const.dataPerPage) + 1;
            WriteListXml(0, "成功", count, Const.dataPerPage, total, page, table);
        }

        private void DropDownBuilding()
        {
            string 街道代码 = GetStringValue("街道代码");
            DataTable table = null;
            if (string.IsNullOrEmpty(街道代码))
            {
                table = 建筑操作.GetBuildingDropDown();
            }
            else
            {
                table = 建筑操作.GetBuildingDropDown(街道代码);
            }
            if (table != null && table.Rows.Count > 0)
            {
                WriteReturnXml(0, null, table);
            }
            else
            {
                WriteReturnXml(-1, "查询失败", table);
            }
        }

        private void DropDownBuildingByCode()
        {
            string 街道代码 = GetStringValue("街道代码");
            string 税务机关代码 = GetStringValue("税务机关代码");
            DataTable table = null;
            table = 建筑操作.GetBuildingDropDown(街道代码, 税务机关代码);
            if (table != null && table.Rows.Count > 0)
            {
                WriteReturnXml(0, null, table);
            }
            else
            {
                WriteReturnXml(-1, "查询失败", table);
            }
        }

        private void GetBuilding()
        {
            string 建筑物代码 = GetStringValue("建筑物代码");
            if (string.IsNullOrEmpty(建筑物代码))
            {
                WriteReturnXml(-1, "参数传入错误", null);
                return;
            }
            DataRow row = 建筑操作.GetBuildingRow(建筑物代码);
            if (row != null)
            {
                WriteReturnXml(0, "", row.Table);
            }
            else
            {
                WriteReturnXml(-1, "未查询到数据", null);
            }
        }

        private void DeleteBuilding()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.建筑物维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            string 建筑物代码 = GetStringValue("建筑物代码");
            if (string.IsNullOrEmpty(建筑物代码))
            {
                WriteReturnXml(-1, "参数传入错误", null);
                return;
            }
            if (建筑操作.DeleteBuilding(建筑物代码))
            {
                WriteReturnXml(0, "", null);
            }
            else
            {
                WriteReturnXml(-1, "删除失败", null);
            }
        }

        private void DeleteBuildingMulti()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.建筑物维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            string[] 建筑物代码 = GetStringsValue("建筑物代码");
            if (建筑操作.DeleteBuilding(建筑物代码))
            {
                WriteReturnXml(0, "", null);
            }
            else
            {
                WriteReturnXml(-1, "删除失败", null);
            }
        }
        #endregion

        #region 楼层
        private void SaveFloor()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.楼层维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            int ID = GetInt32Value("ID");
            string 街道代码 = GetStringValue("街道代码");
            string 建筑物代码 = GetStringValue("建筑物代码");
            string 楼层 = GetStringValue("楼层");
            float 单位面积租金参考 = GetFloatValue("单位面积租金参考");
            float 预警幅度 = GetFloatValue("预警幅度");
            float 自营房单位面积租金参考 = GetFloatValue("自营房单位面积租金参考");
            float 自营房预警幅度 = GetFloatValue("自营房预警幅度");
            if (ID < 1)
            {
                if (建筑操作.AddFloor(街道代码, 建筑物代码, 楼层, 单位面积租金参考, 预警幅度, 自营房单位面积租金参考, 自营房预警幅度))
                {
                    WriteReturnXml(0, "", null);
                }
                else
                {
                    WriteReturnXml(-1, "添加失败", null);
                }
            }
            else
            {
                if (建筑操作.UpdateFloor(ID, 街道代码, 建筑物代码, 楼层, 单位面积租金参考, 预警幅度, 自营房单位面积租金参考, 自营房预警幅度))
                {
                    WriteReturnXml(0, "", null);
                }
                else
                {
                    WriteReturnXml(-1, "修改失败", null);
                }
            }
        }

        private void ListFloor()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.楼层维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            SimpleQueryBuilder SqlBuilder
                                = new SimpleQueryBuilder()
                                {
                                    FieldsString = "a.*,c.街道名称,b.建筑物名称",
                                    FromString = @"from 楼层表 a 
left join 建筑物表 b on b.建筑物代码=a.建筑物代码
left join 街道表 c on c.街道代码=b.街道代码",
                                    PageOrderString = "order by a.ID",
                                    FieldsStringForCount = "count(a.ID) as count"
                                };
            List<string> con = new List<string>();
            con.Add("b.建筑物代码 like '%" + GetStringValue("建筑物代码") + "%'");
            con.Add("b.建筑物名称 like '%" + GetStringValue("建筑物名称") + "%'");
            con.Add("c.街道代码 like '%" + GetStringValue("街道代码") + "%'");
            con.Add("c.街道名称 like '%" + GetStringValue("街道名称") + "%'");
            SqlBuilder.Conditions = con.ToArray();
            int page = GetInt32Value("page") < 1 ? 1 : GetInt32Value("page");
            string sql = SqlBuilder.BuildQuerySql(page, Const.dataPerPage);
            string sql1 = SqlBuilder.BuildQueryStatisticSql();
            DataTable table = CmdUtil.ExcuteDataTable(sql);
            object o = CmdUtil.ExcuteScalar(sql1);
            int count = int.Parse(o == null ? "0" : o.ToString());
            int total = count % Const.dataPerPage == 0 ?
                count / Const.dataPerPage : (count / Const.dataPerPage) + 1;
            WriteListXml(0, "成功", count, Const.dataPerPage, total, page, table);
        }

        private void DropDownFloor()
        {
            string 建筑物代码 = GetStringValue("建筑物代码");
            DataTable table = 建筑操作.GetFloorDropDown(建筑物代码);
            if (table != null && table.Rows.Count > 0)
            {
                WriteReturnXml(0, null, table);
            }
            else
            {
                WriteReturnXml(-1, "查询失败", table);
            }
        }

        private void GetFloor()
        {
            int id = GetInt32Value("ID");
            if (id < 1)
            {
                WriteReturnXml(-1, "参数传入错误", null);
                return;
            }
            DataRow row = 建筑操作.GetFloorRow(id);
            if (row != null)
            {
                WriteReturnXml(0, "", row.Table);
            }
            else
            {
                WriteReturnXml(-1, "未查询到数据", null);
            }
        }

        private void DeleteFloor()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.楼层维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            int id = GetInt32Value("ID");
            if (id < 1)
            {
                WriteReturnXml(-1, "参数传入错误", null);
                return;
            }
            if (建筑操作.DeleteFloor(id))
            {
                WriteReturnXml(0, "", null);
            }
            else
            {
                WriteReturnXml(-1, "删除失败", null);
            }
        }

        private void DeleteFloorMulti()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.楼层维护.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            //int[] ids = GetIntValue("ids");
            //if (建筑操作.DeleteFloor(ids))
            //{
            //    XmlUtil.WriteReturnXml(0, "", null, "楼层.xml");
            //}
            //else
            //{
            //    XmlUtil.WriteReturnXml(-1, "删除失败", null, "楼层.xml");
            //}
        }
        #endregion
    }
}